package com.lmq.innerclasses;// innerclasses/Parcel5.java
// (c)2021 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
// Nesting a class within a method

public class Parcel5 {
  public Destination destination(String s) {
    final class PDestination implements Destination {
      private String label;
      private PDestination(String whereTo) {
        label = whereTo;
      }
      @Override
      public String readLabel() { return label; }
    }
    return new PDestination(s);
  }
  public static void main(String[] args) {
    Parcel5 p = new Parcel5();
    Destination d = p.destination("Tasmania");
  }

  /**
   * The class PDestination is part of destination() rather than being part of Parcel5.
   * Therefore, PDestination cannot be accesed outside of destination()
   * The upcasting in the return statement means nothing comes out of
   * destination() except a reference to a Destination interface.The fact that the name of the class
   * PDestination is placed inside destination() doesn't mean PDestination is not a valid object once destination() returns.
   * You can use the class identifier PDestination for an inner class inside each class in the same subdirectory without a name clash.
   * Next,, see how you can nest an inner class within any arbitrary scope:
   *
   *
   */
}
